function Sprite()
{
	
	var _bitmap     = null;
	
	var _x          = 0;
	var _y          = 0;
	
	var _zoom       = false;
	var _zoomX      = 1;
	var _zoomY      = 1;
	var _zoomWidth  = 0;
	var _zoomHeight = 0;
	
	var _srcRect       = false;
	var _srcRectX      = 0;
	var _srcRectY      = 0;
	var _srcRectWidth  = Infinity;
	var _srcRectHeight = Infinity;
	
	this.getBitmap = function()
	{
		return _bitmap;
	}
	
	this.setPosition = function(x, y)
	{
		_x = Math.round(x);
		_y = Math.round(y);
	}
	
	this.setZoom = function(zoomX, zoomY)
	{
		_zoomX = zoomX ? zoomX : 1;
		_zoomY = zoomY ? zoomY : 1;
		_zoom  = ((_zoomX != 1) || (_zoomY != 1));
		if (_srcRect)
		{
			_zoomWidth  = Math.round(_zoomX * _srcRectWidth);
			_zoomHeight = Math.round(_zoomY * _srcRectHeight);
		}
		else if (_bitmap)
		{
			_zoomWidth  = Math.round(_zoomX * _bitmap.getWidth());
			_zoomHeight = Math.round(_zoomY * _bitmap.getHeight());
		}
		else
		{
			_zoomWidth  = 0;
			_zoomHeight = 0;
		}
	}
	
	this.setSrcRect = function(srcRectX, srcRectY, srcRectWidth, srcRectHeight)
	{
		if (_bitmap)
		{
			_srcRectX      = Math.clamp(srcRectX ? Math.round(Math.abs(srcRectX)) : 0, 0, _bitmap.getWidth() - 1);
			_srcRectY      = Math.clamp(srcRectY ? Math.round(Math.abs(srcRectY)) : 0, 0, _bitmap.getHeight() - 1);
			_srcRectWidth  = Math.clamp(Math.round(srcRectWidth ? Math.abs(srcRectWidth) : _bitmap.getWidth()), 1, _bitmap.getWidth() - _srcRectX);
			_srcRectHeight = Math.clamp(Math.round(srcRectHeight ? Math.abs(srcRectHeight) : _bitmap.getHeight()), 1, _bitmap.getHeight() - _srcRectY);
			_srcRect       = ((_srcRectX != 0) || (_srcRectY != 0) || (_srcRectWidth != Math.round(_bitmap.getWidth())) || (_srcRectHeight != Math.round(_bitmap.getHeight())));
		}
		else
		{
			_srcRectX      = srcRectX ? Math.round(Math.abs(srcRectX)) : 0;
			_srcRectY      = srcRectY ? Math.round(Math.abs(srcRectY)) : 0;
			_srcRectWidth  = Math.clamp(srcRectWidth  ? Math.round(srcRectWidth)  : Infinity, 1, Infinity);
			_srcRectHeight = Math.clamp(srcRectHeight ? Math.round(srcRectHeight) : Infinity, 1, Infinity);
			_srcRect       = ((_srcRectX != 0) || (_srcRectY != 0) || (_srcRectWidth != Infinity) || (_srcRectHeight != Infinity));
		}
		this.setZoom(_zoomX, _zoomY);
	}
	
	this.setBitmap = function(bitmap)
	{
		_bitmap = bitmap;
		//this.setSrcRect(_srcRectX, _srcRectY, _srcRectWidth, _srcRectHeight);
	}
	
	this.draw = function(context)
	{
		if (context && _bitmap)
			if (_srcRect)
				context.drawImage(
					_bitmap.getCanvas(),
					_srcRectX,
					_srcRectY,
					_srcRectWidth,
					_srcRectHeight,
					_x,
					_y,
					_zoomWidth,
					_zoomHeight
				);
			else if (_zoom)
				context.drawImage(
					_bitmap.getCanvas(),
					_x,
					_y,
					_zoomWidth,
					_zoomHeight
				);
			else
				context.drawImage(
					_bitmap.getCanvas(),
					_x,
					_y
				);
	}
	
}